package com;

import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:选择排序
 * User: YJ
 * Date: 2024-4-03
 * Time: 21:07
 */
public class SelectionSortExe {
    public static void main(String[] args) {
        int[] arr = new int[]{2, 5, 1, 9, -1, 8, 3};
        SelectionSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 选择排序
     *
     * @param a
     */
    public static void SelectionSort(int[] a) {
        //进行数组长度 - 1次选择
        for (int right = a.length - 1; right > 0; right--) {
            //每次找出最大索引，与数组尾部交换，交换后数组尾部自减（下次最大值与数组倒数第二位置处交换，依次进行）
            //第一次假设数组末尾值是最大的
            int max = right;
            for (int i = 0; i < right; i++) {
                if (a[max] < a[i]) {
                    max = i;
                }
            }
            //当数组最后一个数是最大数时，省去一次选择
            if (max != right) {
                swap(a, max, right);
            }
        }
    }

    /**
     * 交换位置
     *
     * @param a
     * @param i
     * @param j
     */
    public static void swap(int[] a, int i, int j) {
        int t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
}
